<?php
// ------------------------------------------------------------------------
// |@Author       : Jarmin <edshop@qq.com>
// |@----------------------------------------------------------------------
// |@Date         : 2023-07-04 15:24:03
// |@----------------------------------------------------------------------
// |@LastEditTime : 2023-07-04 15:24:05
// |@----------------------------------------------------------------------
// |@LastEditors  : Jarmin <jarmin@ladmin.cn>
// |@----------------------------------------------------------------------
// |@Description  : 
// |@----------------------------------------------------------------------
// |@FilePath     : Role.php
// |@----------------------------------------------------------------------
// |@Copyright (c) 2023 http://www.ladmin.cn   All rights reserved. 
// ------------------------------------------------------------------------
namespace app\login\logic;

use think\admin\Logic;

/**
 * 角色逻辑类，用于实现登陆获取角色权限的业务逻辑操作。
 */
class Role extends Logic
{
    /**
     * 获取用户角色权限信息
     * @param int|null $user_id 用户ID（可为null）
     * @param array $role_list 角色ID列表
     * @return array 返回角色的栅格布局信息
     */
    public function getRoleInfo(?int $user_id, array $role_list): array
    {
        if ($user_id !== null && $user_id !== 1) {
            $roles = $this->modelSystemRole->whereIn('id', $role_list)->select();
        } else {
            $roles = $this->modelSystemRole->select();
        }
        return $this->getDashboardGrid($roles);
    }

    /**
     * 合并角色栅格布局信息，去重后返回
     * @param \think\Collection $role 角色信息
     * @return array 返回角色的栅格布局信息
     */
    private function getDashboardGrid(\think\Collection $role): array
    {
        $dashboard_grid = [];
        // 合并角色的栅格布局信息，去重后返回
        foreach ($role->column('grid_list') as $v){
            $dashboard_grid = array_unique(array_merge_recursive($dashboard_grid, json_decode($v)));
        }
        return $dashboard_grid;
    }
}